package com.hzz.mall.seckill;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

//@EnableRabbit 监听消息的时候加，发送消息的时候不需要  导入进行RabbitTemplate rabbitTemplate;
/**
 * 整合sentinel
 * 1.导入依赖 2.下载控制台 可视化界面
 * 3.配置 sentinel控制台地址信息
 * 4.在控制台调整参数。【默认所有的流控设置保存在内存中】
 * 5.每个微服务导入actuator;并在yml中配置暴露所有的端口
 * 6.使用sentinel来保护feign的远程调用：熔断
 *   1).调用方的熔断保护：feign.sentinel.enable=true
 *   2).调用方手动指定远程服务的降级策略。远程服务被降级处理，触发我们的熔断回调方法
 *   3).超大浏览量的时候，必须牺牲一些远程服务，在服务的提供方(远程服务)指定降级策略，
 *      提供方是在运行，但是不运行自已的业务逻辑，返回的是默认的降级数据(限流的数据)
 * 7.自定义受保护的资源(熔断是降级的前提，要先熔断了才有降级的方法)
 *   1.代码实现
 *     try(Entry entry = SphU.entry('seckillSkus')){
 *
 *     }  'seckillSkus':自定义资源名
 *     catch(BlockException e) {}
 *   2.基于注解  方法实现层见
 */
@EnableRedisHttpSession
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.hzz.mall.seckill.feign")
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MallSeckillApplication {

    public static void main(String[] args) {
        SpringApplication.run(MallSeckillApplication.class, args);
    }

}
